package com.duoduo.树;

import com.duoduo.TreeNode;

/**
 * @program: algorithm
 * @description: 平衡二叉树110
 * 给定一个二叉树，判断它是否是高度平衡的二叉树。
 *
 * 本题中，一棵高度平衡二叉树定义为：
 *
 * 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
 * 输入：root = [3,9,20,null,null,15,7]
 * 输出：true
 * @author: chaidl  ！
 * @create: 2022-04-14 22:17
 */
public class 平衡二叉树110 {
	public boolean isBalanced(TreeNode root) {
		if (root==null){
			return true;
		}
		int result=accessTree(root);
		return  result!=-1;
	}
	
	private int accessTree(TreeNode root) {
		if (root == null) {
			return 0;
		}
		int left=accessTree(root.left);
		int right=accessTree(root.right);
		if (left==-1 || right == -1 || Math.abs(left-right)>1){
			return -1;
		}
		return Math.max(left,right)+1;
	}
}
